home *** CD-ROM | disk | FTP | other *** search
- /*
- IC Popup Whats.c
-
- */
-
- #include <Dialogs.h>
-
- #include "IC Window Globals.h"
- #include "IC Popup Whats.h"
-
- #include "IC Types.h"
- #include "IC StrH.h"
- #include "IC Dialogs.h"
- #include "IC Misc Subs.h"
- #include "IC Subs.h"
- #include "IC API.h"
- #include "IC Document.h"
- #include "IC Movable Modal.h"
-
- void InternalSetItem(MenuHandle mh,short item_num,StringPtr text){
- Delete(text,TPPos("\p:",text),255);
- SetMenuItemText(mh,item_num,text);
- }
-
- void SafeAppendMenu(MenuHandle mh,StringPtr text){
- AppendMenu(mh,"\pFred");
- InternalSetItem(mh,CountMItems(mh),text);
- }
-
- void SafeInsertMenuItem(MenuHandle mh,short after,StringPtr text){
- InsertMenuItem(mh,"\pFred",after);
- InternalSetItem(mh,after,text);
- }
-
- void AdjustPopupMenu(DialogPtr dlg,short item){
- ControlHandle control;
- MenuHandle menuh;
- Handle servers;
- Str255 server,str;
- short servers_count,menu_count,i,found;
- Boolean longmenu;
-
- control=GetDControlHandle(dlg,item);
- menuh=GetPopupMHandle(dlg,item);
- servers=(Handle)(*control)->contrlRfCon;
- menu_count=CountMItems(menuh);
- servers_count=CountStrsH(servers);
-
- if (menu_count==0){
- for (i=2;i<servers_count;i++){
- GetIndStrH(servers,i,server);
- SafeAppendMenu(menuh,server);
- }
- AppendMenu(menuh,"\p(-");
-
- GetAString(server,128,2);
- AppendMenu(menuh,server);
- menu_count=CountMItems(menuh);
- }
-
- found=-1;
-
- GetIndStrH(servers,1,server);
-
- for (i=2;i<servers_count;i++){
- GetIndStrH(servers,i,str);
- if (IUEqualString(server, str)==0){
- found=i;
- break;
- }
- }
-
- longmenu=menu_count==(servers_count+3);
-
- if (found>0){
- if (longmenu){
- DeleteMenuItem(menuh,1);
- DeleteMenuItem(menuh,1);
- SetDCtlValue(dlg,item,GetDCtlValue(dlg,item)-2);
- }
- SetControlMaximum(GetDControlHandle(dlg,item),CountMItems(menuh));
- SetDCtlValue(dlg,item,found-1);
- } else {
- if (!longmenu){
- InsertMenuItem(menuh,"\p(-;Fred",0);
- SetDCtlValue(dlg,item,GetDCtlValue(dlg,item)+2);
- }
- GetIndStrH(servers,1,str);
- InternalSetItem(menuh,1,str);
- SetControlMaximum(GetDControlHandle(dlg,item),CountMItems(menuh));
- SetDCtlValue(dlg,item,1);
- }
- EnableItem(menuh,GetDCtlValue(dlg,item));
- }
-
- Boolean UsingName(Handle servers,StringPtr name){
- Str255 tmpstr;
- short i;
-
- for (i=2;i<CountStrsH(servers);i++){
- GetIndStrH(servers,i,tmpstr);
- Delete(tmpstr,TPPos("\p:",tmpstr),255);
- if (IUEqualString(tmpstr,name)==0)
- return true;
- }
-
- return false;
- }
-
- Handle ask_filter_globals;
-
- pascal Boolean AskServerFilter(DialogPtr dlog,EventRecord* event,short* item){
- Boolean dim_ok;
- Str255 name_string,host_string;
-
- GetItemText(dlog,4,name_string);
- GetItemText(dlog,5,host_string);
-
- dim_ok=(name_string[0]==0)||(host_string[0]==0)||(UsingName(ask_filter_globals,name_string));
- SetDCtlEnable(dlog,ok,!dim_ok);
- OutlineDefault1(dlog,3);
-
- return CancelModalFilter(dlog,event,item);
- }
-
- Boolean AskOtherServer(Boolean archie_popup,Handle servers,StringPtr server){
- DialogPtr modal;
- Boolean result=false;
- short item;
- Str255 tmpstr,tmpstr2;
- Ptr saved_state;
-
- modal=GetNewDialog(400,(Ptr)0,(WindowPtr)-1);
-
- if (modal!=(DialogPtr)0){
- GetAString(tmpstr,128,3+archie_popup);
- ParamText(tmpstr,"\p","\p","\p");
- SelectDialogItemText(modal,4,0,32767);
- SetUpDefaultOutline(modal,ok,3);
-
- if (archie_popup){
- HideDialogItem(modal,6);
- HideDialogItem(modal,10);
- }
-
- ShowWindow(modal);
- DisableMenuBar(&saved_state,-1);
-
- InitCursor();
-
- ask_filter_globals=servers;
-
- do {
- MovableModalDialog(gAskServerFilter,&item);
- } while ((item!=ok)&&(item!=cancel));
-
- result=(item==ok);
-
- if (result){
- GetItemText(modal,4,server);
- GetItemText(modal,5,tmpstr);
- GetItemText(modal,6,tmpstr2);
-
- Concat(server,4,"\p:",tmpstr,"\p:",tmpstr2);
- }
-
- ReEnableMenuBar(&saved_state);
- DisposeDialog(modal);
- }
-
- return result;
- }
-
- #define pf_archie 0
- #define pf_archie_mask 0x0001
-
- OSErr WhatClickPopup(WindowType wt,short item,EventRecord* er){
- WindowPtr dlg;
- short value;
- ControlHandle control;
- MenuHandle menuh;
- Handle servers;
- Str255 server,str;
- short menu_count,servers_count;
- Boolean longmenu,archie_popup;
-
- dlg=WindowInfo[wt].window;
- control=GetDControlHandle(dlg,item);
- menuh=GetPopupMHandle(dlg,item);
- servers=(Handle)(*control)->contrlRfCon;
-
- menu_count=CountMItems(menuh);
- servers_count=CountStrsH(servers);
-
- longmenu=(menu_count)==(servers_count+3);
-
- value=GetDCtlValue(dlg,item);
- if (value==menu_count){
- archie_popup=WindowInfo[wt].items[item]->flags&pf_archie_mask;
- if (AskOtherServer(archie_popup,servers,server)){
- SetIndStrH(servers,1,server);
- }
-
- AdjustPopupMenu(dlg,item);
- } else {
- value=value-2*longmenu;
- if (value>0){
- GetIndStrH(servers,value+1,server);
- SetIndStrH(servers,1,server);
- AdjustPopupMenu(dlg,item);
- }
- }
-
- return noErr;
- }
-
- OSErr WhatOpenPopup(WindowType wt,short item){
- WindowPtr dlg;
- Str255 server;
- Handle servers;
- Str255 keybase;
- long attr;
- OSErr err=noErr;
- ControlHandle control;
-
- SetPString(keybase,2,WindowInfo[wt].items[item]->key,"\pAll");
- servers=(Handle)0;
-
- if (ICGetPrefHandle(GetInstance(),keybase,&attr,&servers)!=noErr){
- servers=NewStrH();
- if (servers==(Handle)0)
- err=memFullErr;
- }
-
- SetPString(keybase,2,WindowInfo[wt].items[item]->key,"\pPreferred");
-
- if (ICGetPrefStr(GetInstance(),keybase,&attr,server)!=noErr){
- GetIndStrH(servers,1,server);
- }
-
- ProcessAttributes(wt,item,attr);
-
- dlg=WindowInfo[wt].window;
- control=GetDControlHandle(dlg,item);
- (*control)->contrlRfCon=(long)servers;
-
- InsIndStrH(servers,1,server);
-
- AdjustPopupMenu(dlg,item);
- SetDCtlEnable(dlg,item,!IsLocked(wt,item));
-
- return err;
- }
-
- OSErr WhatFlushPopup(WindowType wt,short item){
- WindowPtr dlg;
- Str255 server,old_server,keybase;
- OSErr err=noErr;
- long attr;
- Str31 preferStr="\pPreferred";
- ControlHandle control;
-
- dlg=WindowInfo[wt].window;
- control=GetDControlHandle(dlg,item);
- GetIndStrH((Handle)(*control)->contrlRfCon,1,server);
-
- SetPString(keybase,2,WindowInfo[wt].items[item]->key,"\pPreferred");
-
- if (ICMapErr(ICGetPrefStr(GetInstance(),keybase,&attr,old_server))!=noErr){
- old_server[0]=2;
- old_server[1]=old_server[2]=':';
- }
- if (IUEqualString(old_server,server)!=0){
- err=ICMapErr(ICSetPrefStr(GetInstance(),keybase,ICattr_no_change,server));
- if (err==noErr)
- DirtyDocument();
- }
-
- return err;
- }
-
- OSErr WhatClosePopup(WindowType wt,short item){
- ControlHandle cont;
-
- cont=GetDControlHandle(WindowInfo[wt].window,item);
- DisposeHandle((Handle)(*cont)->contrlRfCon);
-
- return noErr;
- }
-
-
-
-
-
-
-
-
-
-